{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from readRinexObs import rinexobs\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "from matplotlib.dates import YearLocator, MonthLocator, DateFormatter\n",
    "from pandas import DataFrame, Panel4D, read_hdf\n",
    "from glob import glob\n",
    "from datetime import datetime\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/greg/Documents/Summer Research/rinex files/mah62800.15o is a RINEX 2.11 file, 31649.899 kB.\n",
      "30.61 seconds for _block2df\n",
      "17.10 seconds for panel assignments\n",
      "finished in 50.99 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah32800.15o is a RINEX 2.11 file, 38072.718 kB.\n",
      "31.76 seconds for _block2df\n",
      "17.07 seconds for panel assignments\n",
      "finished in 51.97 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah52800.15o is a RINEX 2.11 file, 35699.333 kB.\n",
      "32.45 seconds for _block2df\n",
      "16.99 seconds for panel assignments\n",
      "finished in 52.57 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah72800.15o is a RINEX 2.11 file, 35799.149 kB.\n",
      "31.43 seconds for _block2df\n",
      "17.06 seconds for panel assignments\n",
      "finished in 51.96 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah42800.15o is a RINEX 2.11 file, 37584.842 kB.\n",
      "35.67 seconds for _block2df\n",
      "20.14 seconds for panel assignments\n",
      "finished in 59.28 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah92800.15o is a RINEX 2.11 file, 36138.917 kB.\n",
      "35.07 seconds for _block2df\n",
      "20.08 seconds for panel assignments\n",
      "finished in 58.55 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah22800.15o is a RINEX 2.11 file, 15777.532 kB.\n",
      "20.55 seconds for _block2df\n",
      "11.86 seconds for panel assignments\n",
      "finished in 34.67 seconds\n",
      "/home/greg/Documents/Summer Research/rinex files/mah82800.15o is a RINEX 2.11 file, 38070.627 kB.\n",
      "36.80 seconds for _block2df\n",
      "22.67 seconds for panel assignments\n",
      "finished in 64.86 seconds\n",
      "Seconds to read all files 425.33\n"
     ]
    },
    {
     "ename": "TypeError",
     "evalue": "cannot properly create the storer for: [_STORER_MAP] [group->/data (Group) '',value-><class 'pandas.core.panelnd.Panel4D'>,format->fixed,append->False,kwargs->{'encoding': None}]",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36m_create_storer\u001b[1;34m(self, group, format, value, append, **kwargs)\u001b[0m\n\u001b[0;32m   1168\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1169\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mglobals\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0m_STORER_MAP\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mpt\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgroup\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1170\u001b[0m             \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyError\u001b[0m: 'ndim'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-3-64a056fd2d17>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m     19\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mPanel4D\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     20\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Seconds to read all files {0:.2f}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 21\u001b[1;33m \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_hdf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'data.h5'\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;34m'data'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36mto_hdf\u001b[1;34m(self, path_or_buf, key, **kwargs)\u001b[0m\n\u001b[0;32m   1094\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1095\u001b[0m         \u001b[1;32mfrom\u001b[0m \u001b[0mpandas\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mio\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpytables\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1096\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mpytables\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mto_hdf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_or_buf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1097\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1098\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mto_msgpack\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpath_or_buf\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'utf-8'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36mto_hdf\u001b[1;34m(path_or_buf, key, value, mode, complevel, complib, append, **kwargs)\u001b[0m\n\u001b[0;32m    258\u001b[0m         with HDFStore(path_or_buf, mode=mode, complevel=complevel,\n\u001b[0;32m    259\u001b[0m                       complib=complib) as store:\n\u001b[1;32m--> 260\u001b[1;33m             \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstore\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    261\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    262\u001b[0m         \u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_or_buf\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36m<lambda>\u001b[1;34m(store)\u001b[0m\n\u001b[0;32m    253\u001b[0m         \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mstore\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mstore\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    254\u001b[0m     \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 255\u001b[1;33m         \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mlambda\u001b[0m \u001b[0mstore\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mstore\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mput\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    256\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    257\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mpath_or_buf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstring_types\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36mput\u001b[1;34m(self, key, value, format, append, **kwargs)\u001b[0m\n\u001b[0;32m    824\u001b[0m             \u001b[0mformat\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mget_option\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"io.hdf.default_format\"\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;34m'fixed'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    825\u001b[0m         \u001b[0mkwargs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_validate_format\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 826\u001b[1;33m         \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_write_to_group\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mappend\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    827\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    828\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0mremove\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwhere\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstart\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstop\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36m_write_to_group\u001b[1;34m(self, key, value, format, index, append, complib, encoding, **kwargs)\u001b[0m\n\u001b[0;32m   1244\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1245\u001b[0m         s = self._create_storer(group, format, value, append=append,\n\u001b[1;32m-> 1246\u001b[1;33m                                 encoding=encoding, **kwargs)\n\u001b[0m\u001b[0;32m   1247\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0mappend\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1248\u001b[0m             \u001b[1;31m# raise if we are trying to append to a Fixed format,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36m_create_storer\u001b[1;34m(self, group, format, value, append, **kwargs)\u001b[0m\n\u001b[0;32m   1169\u001b[0m                 \u001b[1;32mreturn\u001b[0m \u001b[0mglobals\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0m_STORER_MAP\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mpt\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgroup\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1170\u001b[0m             \u001b[1;32mexcept\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1171\u001b[1;33m                 \u001b[0merror\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'_STORER_MAP'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1172\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1173\u001b[0m         \u001b[1;31m# existing node (and must be a table)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32m/home/greg/anaconda3/lib/python3.5/site-packages/pandas/io/pytables.py\u001b[0m in \u001b[0;36merror\u001b[1;34m(t)\u001b[0m\n\u001b[0;32m   1134\u001b[0m                 \u001b[1;34m\"cannot properly create the storer for: [%s] [group->%s,\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1135\u001b[0m                 \u001b[1;34m\"value->%s,format->%s,append->%s,kwargs->%s]\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1136\u001b[1;33m                 \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mgroup\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mvalue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mappend\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1137\u001b[0m             )\n\u001b[0;32m   1138\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mTypeError\u001b[0m: cannot properly create the storer for: [_STORER_MAP] [group->/data (Group) '',value-><class 'pandas.core.panelnd.Panel4D'>,format->fixed,append->False,kwargs->{'encoding': None}]"
     ]
    }
   ],
   "source": [
    "files = glob(\"/home/greg/Documents/Summer Research/rinex files/mah*\")\n",
    "\n",
    "svn = 23\n",
    "\n",
    "convertL1ToMeters = 3.0E8/(154.0*10.23E6)\n",
    "convertL2ToMeters = 3.0E8/(120.0*10.23E6)\n",
    "f2f1Factor = 1.545727\n",
    "convertMetersToTEC = 6.158\n",
    "\n",
    "start = datetime(year=2015,month=10,day=7,hour=6,minute=0,second=49)\n",
    "end = datetime(year=2015,month=10,day=7,hour=7,minute=7,second=30)\n",
    "\n",
    "dat = {}\n",
    "\n",
    "t=time.time()\n",
    "for file in files:  \n",
    "    d = rinexobs(file)\n",
    "    dat[file.split('/')[-1]] = d[start:end,svn,:,:]\n",
    "data = Panel4D(dat)\n",
    "print(\"Seconds to read all files {0:.2f}\".format(time.time()-t))\n",
    "data.to_hdf('svn23.h5','data',format='table')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7ff4657d6cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data = read_hdf('svn23.h5','data')\n",
    "fig = plt.figure(figsize=(16,16))\n",
    "ax1 = plt.subplot(211)\n",
    "fmt = DateFormatter('%H:%M:%S')\n",
    "ax1.xaxis.set_major_formatter(fmt)\n",
    "ax1.autoscale_view()\n",
    "plt.title('TEC: SVN 23 from different receivers')\n",
    "plt.xlabel('Time')\n",
    "plt.ylabel('TECu')\n",
    "\n",
    "\n",
    "convertL1ToMeters = 3.0E8/(154.0*10.23E6)\n",
    "convertL2ToMeters = 3.0E8/(120.0*10.23E6)\n",
    "f2f1Factor = 1.545727\n",
    "convertMetersToTEC = 6.158\n",
    "handles=[]\n",
    "\n",
    "for site in data.labels:\n",
    "    \n",
    "    lli = data[site,:,['L1','L2','C1','P2'],'lli']\n",
    "    lli[np.isnan(lli)]=0\n",
    "    lli=lli.astype(int)\n",
    "    llimask = np.logical_or.reduce(lli%2)\n",
    "        \n",
    "    diffRange = data[site,:,'P2','data'] - data[site,:,'C1','data']\n",
    "    diffRange = diffRange * convertMetersToTEC * f2f1Factor\n",
    "    phase = f2f1Factor*(data[site,:,'L1','data']*convertL1ToMeters - data[site,:,'L2','data']*convertL2ToMeters)\n",
    "    phase = phase * convertMetersToTEC\n",
    "    \n",
    "    avg = np.average((phase-diffRange)[np.logical_not(np.isnan(phase-diffRange))])\n",
    "    TEC = phase - avg\n",
    "    \n",
    "    if(site!='mah92800.15o' and site!='mah72800.15o'): \n",
    "        handles.append(plt.plot(TEC[1100:1250],'.',label=site[:4]))\n",
    "        plt.plot(TEC[1100:1250][llimask[1100:1250]],'kx',markersize=10,label='')\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
